// Programa para rapida calibracao dos sensores IR

#define nPtos 5

int colorSensor = 0;    
int leitura[nPtos];       

double coco = 66;

float PRETO = 0;     // fita isolante preta
float s_Preto = 0; // desvio padrao 
float AZUL = 0;      // fita isolante azul
float s_Azul = 0;  // desvio padrao 
float VERDE = 0;     // fita isolante verde
float s_Verde = 0; // desvio padrao 
float BRANCO = 0;    // chao da arena
float s_Branco = 0;// desvio padrao 

void setup() 
{
  Serial.begin(9600);
}

void loop() 
{
  
  //------Calibrando a cor Preta------//
  
  delay(50);
  Serial.println("Sempre tecle 1 para continuar...");
  Serial.println("Ponha o sensor sobre o PRETO");
  
  for( int i = 0; i < nPtos; i++ )
  {
    while( Serial.read() != '1' )
    { ; }
  
    leitura[i] = analogRead(colorSensor);    // read the value from the sensor
 
    Serial.print("Medicao numero ");
    Serial.print(i+1);
    Serial.print(" foi: ");
    Serial.print(leitura[i]);
   
    if( i < nPtos - 1 )   
      Serial.println(" Movimente o sensor sobre o PRETO para nova medida");
    else
      Serial.print("\n");
      
  
    delay(30);
  }
  
  for( int i=0; i<nPtos; i++)
    PRETO += leitura[i];
    
    PRETO = PRETO/nPtos; // Valor medio
    
  for( int i=0; i<nPtos; i++)
    s_Preto += pow( leitura[i] - PRETO, 2);
    
  s_Preto = sqrt( ((1.0/((float)nPtos-1.0))*s_Preto) );  // calculo do desvio padrao
    
    
  Serial.print("Media das medidas de PRETO: ");
  Serial.print( (int)PRETO );
  Serial.print("   Desvio padrao: ");
  Serial.print( (long)(1000*s_Preto) );
  Serial.println( "E-3");
 
  //------Calibrando a cor Branca------//
  
  delay(50);
  Serial.println("Ponha o sensor sobre o BRANCO");
  
  for( int i = 0; i < nPtos; i++ )
  {
    while( Serial.read() != '1' )
    { ; }
  
    leitura[i] = analogRead(colorSensor);    // read the value from the sensor
 
    Serial.print("Medicao numero ");
    Serial.print(i+1);
    Serial.print(" foi: ");
    Serial.print(leitura[i]);
   
    if( i < nPtos - 1 )   
      Serial.println(" Movimente o sensor sobre o BRANCO para nova medida");
    else
      Serial.print("\n");
      
  
    delay(30);
  }
  
  for( int i=0; i<nPtos; i++)
    BRANCO += leitura[i];
    
    BRANCO = BRANCO/nPtos; // Valor medio
    
  for( int i=0; i<nPtos; i++)
    s_Branco += pow( leitura[i] - BRANCO, 2);
    
  s_Branco = sqrt( ((1.0/((float)nPtos-1.0))*s_Branco) );  // calculo do desvio padrao
    
    
  Serial.print("Media das medidas de BRANCO: ");
  Serial.print( (int)BRANCO );
  Serial.print("   Desvio padrao: ");
  Serial.print( (long)(1000*s_Branco) );
  Serial.println( "E-3");
  

//------Calibrando a cor Verde------//
  
  delay(50);
  Serial.println("Ponha o sensor sobre o VERDE");
  
  for( int i = 0; i < nPtos; i++ )
  {
    while( Serial.read() != '1' )
    { ; }
  
    leitura[i] = analogRead(colorSensor);    // read the value from the sensor
 
    Serial.print("Medicao numero ");
    Serial.print(i+1);
    Serial.print(" foi: ");
    Serial.print(leitura[i]);
   
    if( i < nPtos - 1 )   
      Serial.println(" Movimente o sensor sobre o VERDE para nova medida");
    else
      Serial.print("\n");
      
  
    delay(30);
  }
  
  for( int i=0; i<nPtos; i++)
    VERDE += leitura[i];
    
    VERDE = VERDE/nPtos; // Valor medio
    
  for( int i=0; i<nPtos; i++)
    s_Verde += pow( leitura[i] - VERDE, 2);
    
  s_Verde = sqrt( ((1.0/((float)nPtos-1.0))*s_Verde) );  // calculo do desvio padrao
    
    
  Serial.print("Media das medidas de VERDE: ");
  Serial.print( (int)VERDE );
  Serial.print("   Desvio padrao: ");
  Serial.print( (long)(1000*s_Verde) );
  Serial.println( "E-3");
  


//------Calibrando a cor Azul------//
  
  delay(50);
  Serial.println("Ponha o sensor sobre o AZUL");
  
  for( int i = 0; i < nPtos; i++ )
  {
    while( Serial.read() != '1' )
    { ; }
  
    leitura[i] = analogRead(colorSensor);    // read the value from the sensor
 
    Serial.print("Medicao numero ");
    Serial.print(i+1);
    Serial.print(" foi: ");
    Serial.print(leitura[i]);
   
    if( i < nPtos - 1 )   
      Serial.println(" Movimente o sensor sobre o AZUL para nova medida");
    else
      Serial.print("\n");
      
  
    delay(30);
  }
  
  for( int i=0; i<nPtos; i++)
    AZUL += leitura[i];
    
    AZUL = AZUL/nPtos; // Valor medio
    
  for( int i=0; i<nPtos; i++)
    s_Azul += pow( leitura[i] - AZUL, 2);
    
  s_Azul = sqrt( ((1.0/((float)nPtos-1.0))*s_Azul) );  // calculo do desvio padrao
    
    
  Serial.print("Media das medidas de AZUL: ");
  Serial.print( (int)AZUL );
  Serial.print("   Desvio padrao: ");
  Serial.print( (long)(1000*s_Azul) );
  Serial.println( "E-3");
  
  //------RESULTADOS------//
  Serial.print("\n \n");
  Serial.println("---------------RESULTADOS---------------");
  Serial.println("COR \t\t MEDIA \t\t s \n");
  Serial.print("Preto \t\t");
  Serial.print((int)PRETO);
  Serial.print(" \t\t");
  Serial.print( (long)(1000*s_Preto) );
  Serial.println( "E-3 \n");
  Serial.print("Branco \t\t");
  Serial.print((int)BRANCO);
  Serial.print(" \t\t");
  Serial.print( (long)(1000*s_Branco) );
  Serial.println( "E-3 \n");
  Serial.print("Verde \t\t");
  Serial.print((int)VERDE);
  Serial.print(" \t\t");
  Serial.print( (long)(1000*s_Verde) );
  Serial.println( "E-3 \n");
  Serial.print("Azul \t\t");
  Serial.print((int)AZUL);
  Serial.print(" \t\t");
  Serial.print( (long)(1000*s_Azul) );
  Serial.println( "E-3 \n");
  
  while(true)
  { delay(1000);}
}

  /*
  if( leitura <= (BRANCO + (VERDE - BRANCO)/2 ) )
  {
    Serial.println("BRANCO!");
  }
  else 
  {
    if ( (leitura > (BRANCO + (VERDE - BRANCO)/2 )) && (leitura <= (VERDE + (VERMELHO - VERDE)/2 )) )
    {
          Serial.println("VERDE!");
    }
    else
    {
      if( (leitura > (VERDE + (VERMELHO - VERDE)/2 )) && (leitura <= (VERMELHO + (PRETO - VERMELHO)/2 )) )
      {
           Serial.println("VERMELHO!");
      }
      else
      {
          Serial.println("PRETOOO!");
      }
      
    }
    
  }
  
}*/
